package logica.persistencia;

import java.util.List;

import logica.Diagrama;
import logica.DiagramaPrincipal;

import vista.objetos.DiagramaGraficable;
import vista.objetos.ProyectoGraficable;
import xml.XMLManager;

public class ProyectoGraficablePersistente {
	private ProyectoGraficable proyectoGraficable;
	public ProyectoGraficablePersistente(ProyectoGraficable _proyectoGraficable) {
		proyectoGraficable = _proyectoGraficable;
	}

	private Boolean serializarDiagramasSecundarios(DiagramaGraficable diag) {
		Boolean exito = true;
		List<DiagramaGraficable> diagramasHijos = diag.getDiagramasHijos();
		
		for (DiagramaGraficable diagrama : diagramasHijos ) {
			DiagramaGraficablePersistente diagPS = new DiagramaGraficablePersistente(diagrama);
			diagPS.serializar();
			exito = (exito)? XMLManager.getInstance().serializarDiagramaGraficoPersistente(diagPS): false;
			exito = serializarDiagramasSecundarios(diagrama);
		}
		return exito;
	}
	
	public Boolean hidratar() {
		Boolean exito = true;
		DiagramaGraficablePersistente diagP = proyectoGraficable.getDiagramaPpal().getDiagramaPersistente();
		exito = (exito)? XMLManager.getInstance().hidratarDiagramaGraficoPersistente(diagP): false;
		
		if (exito) {
			diagP.hidratar();
		}
		DiagramaPrincipal diagramaPrincipal = proyectoGraficable.getProyecto().getDiagramaPpal();
		DiagramaGraficable diag = this.proyectoGraficable.getDiagramaPpal();
		exito = hidratarDiagramasSecundarios(diagramaPrincipal.getDiagramasHijo(), diag);
		
		return exito;	
	}
	
	private Boolean hidratarDiagramasSecundarios(List<Diagrama> diagramasLogicosHijos, DiagramaGraficable diagramaGraficablePadre) {
		Boolean exito = true;
	
		for (Diagrama diagrama : diagramasLogicosHijos) {
			DiagramaGraficable diagGraf  = new DiagramaGraficable(diagrama);
 			DiagramaGraficablePersistente diagPS = new DiagramaGraficablePersistente(diagGraf);
			exito = (exito)? XMLManager.getInstance().hidratarDiagramaGraficoPersistente(diagPS): false;
			if (exito) {
				diagPS.hidratar();
				diagramaGraficablePadre.agregarDiagramaHijo(diagGraf);
			}
			exito = (exito)? hidratarDiagramasSecundarios(diagrama.getDiagramasHijo(), diagGraf): false;
		}
		
		return exito;
	}

	public Boolean serializar() {
		Boolean exito = true;
		DiagramaGraficablePersistente diagP = this.proyectoGraficable.getDiagramaPpal().getDiagramaPersistente();
		diagP.serializar();
				
		exito = (exito)? XMLManager.getInstance().serializarDiagramaGraficoPersistente(diagP): false;
		
		//Diagramas secundarios
		DiagramaGraficable diag = this.proyectoGraficable.getDiagramaPpal();
		exito = serializarDiagramasSecundarios(diag);
		return exito;
	}

}
